package ltd.bugs.cute.httpclient.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * httpclient的相关配置，如果未配置，使用默认值
 * 
 * @author zhengzhq
 *
 */
@Component
public class HttpClientConfig {

  // 整个httpclient连接池的最大连接数，默认200
  @Value("${httpclient.max.connection:200}")
  private int maxConnection;

  // 每个路由支持的最大连接数，所有路由的连接数加起来不会超过maxConnection，默认100
  @Value("${httpclient.max.connection.perroute:100}")
  private int maxConnectionPerRoute;

  // 失败重试次数，默认3次
  @Value("${httpclient.retry.times:3}")
  private int retryTimes;

  // 从池子中请求连接的超时时间，应当只有在池子中连接用完等待获取的时候才会出现，单位：毫秒
  @Value("${httpclient.connection.request.timeout:3000}")
  private int connectionRequestTimeout;

  // 和对方服务器建立HTTP连接的超时时间，默认3秒，单位：毫秒
  @Value("${httpclient.connection.timeout:3000}")
  private int connectionTimeout;

  // 和对方服务器通讯时的超时时间，默认5s
  @Value("${httpclient.socket.timeout:5000}")
  private int socketTimeout;

  // 连接空闲时间，空闲超过多少时间会被关闭，默认60秒
  @Value("${httpclient.idleconnection.time:30000}")
  private int connectionIdleTime;

  // 定时检测连接的cron表达式，默认30s检查一次链接情况
  @Value("${httpclient.connectionmgr.cron.expression:0/30 * * * * *}")
  private String connectionMgrCronExpression;

  public int getMaxConnection() {
    return maxConnection;
  }

  public int getMaxConnectionPerRoute() {
    return maxConnectionPerRoute;
  }

  public int getRetryTimes() {
    return retryTimes;
  }

  public int getConnectionRequestTimeout() {
    return connectionRequestTimeout;
  }

  public int getConnectionTimeout() {
    return connectionTimeout;
  }

  public int getSocketTimeout() {
    return socketTimeout;
  }

  public int getConnectionIdleTime() {
    return connectionIdleTime;
  }

  public String getConnectionMgrCronExpression() {
    return connectionMgrCronExpression;
  }
}
